#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
主题:将序列分解为单独的变量
问题: 现在有一个包含 N 个元素的元组或者是序列，怎样将它里面的值解压后同时赋值给 N 个变量？
提示 : 
    1. 如果元素的数量不匹配，会得到一个错误提示
"""


def main():
    print('recipe1'.center(20,'*'))
    recipe1()
    print('recipe2'.center(20,'*'))
    recipe2()
    print('recipe3'.center(20,'*'))
    recipe3()

def recipe1():
    '''任何的序列（或者是可迭代对象）可以通过一个简单的赋值操作来分解为单独的变量。 唯一的要求就是变量的总数和结构必须与序列相吻合'''
    # 元组
    p = (4, 5)
    print(f"{p = }")
    x, y = p
    print(f"{x = }")
    print(f"{y = }")

    # 序列
    data = ['ACME', 50, 91.1, (2012, 12, 21)]
    print(f"{data = }")
    name, shares, price, date = data
    print(f"{name = }")
    print(f"{date = }")

    name, shares, price, (year, mon, day) = data
    print(f"{name = }")
    print(f"{year = }")
    print(f"{mon = }")
    print(f"{day = }")

def recipe2():
    '''不仅仅只是元组或列表，只要对象是可迭代的，就可以执行分解操作。 包括字符串，文件对象，迭代器和生成器'''
    s = 'Hello'
    print(f"{s = }")
    a, b, c, d, e = s
    print(f"{a = }")
    print(f"{e = }")

def recipe3():
    '''使用任意变量名去占位'''
    data = ['ACME', 50, 91.1, (2012, 12, 21)]
    print(f"{data = }")
    _, shares, price, _ = data
    print(f"{shares = }")
    print(f"{price = }")

if __name__ == '__main__':
    main()